iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0
Modern Web

我與 ASP.NET Core 的 30天系列 第 28

[Day28] 組態設定 - 我與 ASP.NET Core 3 的 30天

  • 分享至 

  • xImage
  •  

ASP.NET Core 中的設定是使用一或多個組態提供者 (Configuration Providers)來執行。組態提供者可以從各種來源取得組態設定資料

  • JSON File (或是INI、XML)
  • 環境變數
  • 命令列參數
  • 自訂組態來源
  • 記憶體內部物件
  • Azure App 組態設定
  • Azure Key Vault

利用 .NET CLI 或是VS等開發工具建立的ASP.NET Core應用程式會產生下列程式碼

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

ConfigureWebHostDefaults會依照下列順序提供應用程式的預設組態

  1. ChainedConfigurationProvider:加入現有的 IConfiguration 作為來源。在預設設定範例中,新增 host設定,並將其設定為應用程式設定的第一個來源。
  2. 使用JSON 組態提供者的appsettings.js 。
  3. appsettings.{Environment}.json使用JSON組態提供者的。例如,appsettings.Production.json 和 appsettings.Development.json。
  4. 應用程式在 Development環境中執行時的App secrets。
  5. 使用 環境變數組態提供者的環境變數。
  6. 使用 命令列組態提供者的命令列參數。
    備註:越後面載入的優先級越高,會將前面的設定覆蓋過去。
    組態設定最終都會變成 key-value 的形式

ConfigureWebHostDefaults在Host實體化之後建立IConfiguration的實體,並放到DI容器中,所以除了在Starup中取得之外,在Controller或是其他類別中也能夠過DI的注入取得設定

接著實際操作一次建立設定檔並從Startup中讀取設定
首先先在appsettings.json中加入

"ConnectionStrings": {
    "DefaultConnection": "server=localhost;Port=3306 ......"
}

接著在Starup.ConfigureServices把註冊DBConext的地方做些修改,修改為讀取設定檔的內容

services.AddDbContext<BlogDbContext>(options =>
                options.UseMySql(
                    Configuration.GetConnectionString("DefaultConnection")));

Configuration取得設定檔的方式有兩種
Configuration.GetConnectionString("DefaultConnection")
Configuration.["ConnectionString.DefaultConnection"]

參考資料
Configuration in ASP.NET Core


上一篇
[Day27] 單元測試 - 我與 ASP.NET Core 3 的 30天
下一篇
[Day29] 部署網站 - 我與 ASP.NET Core 3 的 30天
系列文
我與 ASP.NET Core 的 30天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言